package pm.gui;

import pm.devices.drives.Drive;
import pm.oo.NativeOOViewComponent;
import pm.core.Session;

import java.math.BigDecimal;

/**
 * This interface determines responsibility of Gui Module
 * against of Core for executing gui operations and send
 * notifications of user input to GuiModuleListener registered
 * in constructor.
 *
 * @author Anton Bernatski
 */
public interface GuiModule {

	/**
	 * Shows full-screen splash
	 */
	public void showSplashScreen();

	/**
	 * Shows Main Screen where user selects one of
	 * the operations available on PM:
	 * - print from file
	 * - make copy
	 * - scan to file
	 */
	public void showMainScreen();


	/**
	 * Shows File Choose Screen. On this screen user can:
	 * - select storage device where to search file -- CD, DVD,
	 * usb-storage device, card
	 * - point file to open
	 */
	public void showFileChooseDialog();

	/**
	 * Sets money amount to display in MoneyPanel when
	 * this value is changed
	 *
	 * @param session current session state
	 */
	public void updateSessionState(final Session session);

	/**
	 * Sets current status of plugged devices to display
	 * at FileChoose Screen. Called when this status changes.
	 *
	 * @param drives array contains current plugged devices
	 */
	public void setDrives(final Drive[] drives);

	public void showError(final String message);

	public Long getHWND();
}
